Systems and Methods for Filtering Application Search Results

ABSTRACT

An application search system for providing search results to a plurality of partner devices includes a data processing module that receives data identifying a plurality of applications associated with one or more of a plurality of application categories and generates, based on the received data, a plurality of search indexes. Each of the search indexes corresponds to a respective one of the application categories. An application search module receives a search query from a first partner device of the plurality of partner devices, identifies a first application category of the plurality of application categories based on the search query, selects, from the plurality of search indexes, a first search index corresponding to the identified first application category, queries the selected first search index to identify a first plurality of application representations associated with the identified first application category, and generates search results based on the first plurality of application representations.

CROSS-REFERENCE TO RELATED APPLICATIONS

This application is a continuation of U.S. patent application Ser. No.13/900,470 (now U.S. Pat. No. 9,552,414), filed May 22, 2013, whichclaims the benefit of U.S. Provisional Application No. 61/650,460, filedMay 22, 2012. The entire disclosures of the applications referencedabove are incorporated by reference.

BACKGROUND

Field of Art

The disclosure generally relates to the field of application search, andmore particularly to providing customizable application search.

Description of the Related Art

In recent years, use of computers, smartphones, and otherInternet-connected devices has grown exponentially. Correspondingly, thenumber of available applications for such devices has also grown. Today,many diverse applications can be accessed on any number of differentdevices, including, but not limited to, smartphones, personal computers,wearable devices, refrigerators, automobiles, and televisions. Thesediverse applications can range from business driven applications, games,educational applications, news applications, shopping applications,efficiency applications, messaging applications, video chattingapplications, media streaming applications, social networkingapplications, and so much more.

BRIEF DESCRIPTION OF THE DRAWINGS

The disclosed embodiments have other advantages and features which willbe more readily apparent from the detailed description, the appendedclaims, and the accompanying figures (or drawings). A brief introductionof the figures is below.

FIG. 1 illustrates an example environment for performing applicationsearch.

FIG. 2A is an example high-level block diagram illustrating a detailedview of example modules within a data processing module.

FIG. 2B is a block diagram illustrating example application searchindexes.

FIG. 3 is an example high-level block diagram illustrating a detailedview of modules within an application search module.

FIG. 4A is a flow chart illustrating an example method for dynamicallyfiltering application search results.

FIG. 4B is a flow chart illustrating an example method for dynamicallyfiltering application search results.

FIG. 5 is a flow chart illustrating an example method for receivingdynamically filtered application search results.

FIG. 6 illustrates components of an example machine able to readinstructions from a machine-readable medium and execute the instructionsin a processor (or controller).

DETAILED DESCRIPTION

The Figures (FIGS.) and the following description relate to preferredembodiments by way of illustration only. It should be noted that fromthe following discussion, alternative embodiments of the structures andmethods disclosed herein will be readily recognized as viablealternatives that may be employed without departing from the principlesof what is claimed. It is noted that wherever practicable similar orlike reference numbers may be used in the figures and may indicatesimilar or like functionality.

Configuration Overview

One embodiment of a disclosed system, method, and computer readablestorage medium provides customizable application search via anapplication search system. As used herein, an application may refer toan object or entity that provides a core set of functionalities. In oneaspect, to represent an application, the application search systememploys an application representation structure. The structure mayinclude various application attributes about the application. Suchapplication attributes may correspond to various aspects of anapplication, such as functional aspects, developer information,publisher information, title information, or different variations oreditions of the application.

In one embodiment, the application search system provides applicationsearch functionality to one or more partners. To support applicationsearch, the application search system generates one or more indexes ofapplication representations. The indexes may correspond to differentapplication categories such as functionalities, language, or platform.For example, the application search system may generate an index forapplications having a Spanish attribute, or may generate an index forapplications relating to cooking. In one embodiment, the partners selectcategories of applications to be searched when users of the partnerssubmit queries via the partners' websites. For example, a partner mayselect an application category relating to a particular topic (e.g.,cooking applications or games) or a particular platform (e.g., iOS orANDROID). Alternatively, the application search system may derive anapplication category for a partner by applying a machine learned modelto actions of the partner, such as the application search resultsselected by the partner.

In another embodiment, end users select application categories whensubmitting queries to the application search system. For example, a usermay explicitly specify a category in a query, or may implicitly specifya category based on, for example, the device the user uses to submit thequery. The application search system may prompt the user to select acategory based on the user's input. For example, if the user enters aquery for “games for 3 year olds,” the application search system mayprompt the user, “Would you like to limit your search results to games?”Alternatively, the application search system may determine the user'sintended category by processing the query or information associated withthe query (e.g., the user's device or the language the user used in thequery). For example, the application search system may identify a“games” category for the user's query for “games for 3 year olds.” Asanother example, if the user submits the search query from an ANDROIDphone, the application search system may identify an “ANDROID” categoryfor the user's query. As yet another example, if the user enters asearch query in Spanish, the application search system may identify a“Spanish” language category for the user's query.

System Architecture

FIG. 1 is a high-level block diagram illustrating a typical environment100 used for providing customizable application search, according to oneembodiment. The operations described herein may be performed by one ormore computing systems, such as computing system 100. Referring to FIG.1, the environment 100 includes a network 130, one or more data sources135, one or more partners 125, and an application search system 105.Each of the one or more data sources 135, one or more partners 125, andapplication search system 105 may be in communication with one anothervia the network 130. Only one application search system 105, three datasources 135, and three partners 125 are shown in FIG. 1 for purposes ofclarity, but those of skill in the art will recognize that typicalenvironments can have multiple data sources 135 and partners 125, andcan also have multiple application search systems 105.

The network 130 enables communications between the various entities ofthe environment 100. In one embodiment, the network 130 uses standardcommunications technologies and/or protocols. Thus, the network 130 caninclude links using technologies such as Ethernet, Wireless Fidelity(WiFi) (e.g., 802.11), worldwide interoperability for microwave access(WiMAX), 3G, Long Term Evolution (LTE), digital subscriber line (DSL),asynchronous transfer mode (ATM), InfiniBand, PCI Express AdvancedSwitching, etc. Similarly, the networking protocols used on the network130 can include multiprotocol label switching (MPLS), the transmissioncontrol protocol/Internet protocol (TCP/IP), the User Datagram Protocol(UDP), the hypertext transport protocol (HTTP), the simple mail transferprotocol (SMTP), the file transfer protocol (FTP), etc. The dataexchanged over the network 130 can be represented using technologiesand/or formats including the hypertext markup language (HTML), theextensible markup language (XML), etc. In addition, all or some of linkscan be encrypted using conventional encryption technologies such assecure sockets layer (SSL), transport layer security (TLS), virtualprivate networks (VPNs), Internet Protocol security (IPsec), etc. Inanother embodiment, the entities can use custom and/or dedicated datacommunications technologies instead of, or in addition to, the onesdescribed above. Depending upon the embodiment, the network 130 can alsoinclude links to other networks such as the Internet.

The data sources 135 provide data regarding one or more applications tothe application search system 105. The data sources 135 may include anysuitable data providers, including operators of application stores,application developers, application catalogs, websites (e.g., blogs,application review sites, etc.), and/or the like. In one embodiment,each data source 135 may have its own distinct interface, content,update rate, etc.

The partners 125 provide (via various machines and/or user devices, oneor more of which comprise a partner system) search queries to theapplication search system 105 and receive search results based on thequeries. As used herein, a partner 125 may be a third party entity(e.g., a company or other organization) or an end user that leveragesthe search functionality of the system 105. In some instances, a partner125 may be a third party entity that leverages the search functionalityof the system 105 via its own website or portal. For example, a partner125 may display an application search bar on its website. The partner'send users (for ease of understanding also referred to herein aspartners) may interact with the search bar to send search queries to thesystem. In other instances, a partner 125 may be an end user thatdirectly interfaces with a website or portal provided by the system 105.Alternatively, a partner 125 may be an end user's user device, such as apersonal computer, a laptop computer, a tablet, a mobile phone, or anyother suitable computing device.

In one embodiment, the partners 125 leverage the functionality of thesystem 105 to provide a customized application search via theirwebsites. A partner 125 may select one or more application categories tobe associated with search queries transmitted to the system 105,specifying categories from which the system 105 is to retrieve searchresults. The application search system 105 stores the selections from apartner 125 in association with an IP address of the partner 125 or someother identifier of the partner 125. Thus, the application search system105 processes queries received from or otherwise associated with thepartner 125 based on the categories selected by the partner 125. In oneembodiment, a partner 125 selects categories from a list provided by theapplication search system 105.

The application search system 105 performs searches for applications. Inone aspect, the application search system 105 matches search queries tosuggested applications based on inferred or derived functionalcapabilities of the search queries and applications rather than only onexplicit matches of the keywords associated with the search queries andapplications. In one embodiment, the application search system 105 maybe leveraged by a plurality of partners 125, and each partner 125 may beassociated with one or more application category selections and/orcustomized machine learned scoring models. Accordingly, the applicationsearch system 105 may use applications associated with a particularcategory as the initial consideration set to retrieve search resultsbased on the categories selected by the partner 125. If a partner 125specifies an application category, the application search system 105searches indexes corresponding to the selected category when receivingqueries from the partner 125. In another embodiment, the applicationsearch system 105 identifies application categories based on the searchquery input by a user, and retrieves search results from the indexescorresponding to the identified categories.

As shown in FIG. 1, the application search system 105 includes a dataprocessing module 110 and an application search module 115. Someembodiments of the application search system 105 have different and/orother modules than the ones described herein. Similarly, the functionscan be distributed among the modules in accordance with otherembodiments in a different manner than is described here. Likewise, thefunctions can be performed by other entities.

Data Processing Module

FIG. 2A is a high level block diagram illustrating a detailed view ofmodules within the data processing module 110 according to oneembodiment. The modules described in accordance with FIG. 2 areexecutable by one or more computer systems, e.g., computer system 100.Some embodiments of the data processing module 110 have different and/orother modules than the ones described herein. Similarly, the functionscan be distributed among the modules in accordance with otherembodiments in a different manner than is described here. Likewise, thefunctions can be performed by other entities. The data processing module110 includes modules for performing various functions. These modulesinclude an intake module 205 and an indexing module 210.

The intake module 205 receives data from one or more of the data sources135. The data may be later used to support application search. In oneembodiment, the data received from the data sources 135 may includeinformation about one or more application representations. For example,data may be scraped from web pages on the Internet using one or morecrawlers. In one embodiment, at least some of the data received from thedata sources 135 may include information regarding the functionalitiesof the one or more applications.

The indexing module 210 generates one or more search indexes usable forsupporting application search. In order to generate the indexes, theindexing module 210 identifies applications from the data received bythe intake module 205, and generates application representationstructures for the applications. The indexing module 210 additionallyextracts attributes from the gathered data for the identifiedapplications. An attribute may be a particular characteristic thatdescribes a feature of the application. For example, attributes may beicons that represent the application, screenshot images of theapplication in operation, an Application ID, a store ID, a developername, a publisher name, a language, an ESRB (Entertainment SoftwareRating Board) rating, a date released, a category, a size of anapplication, platform information, a price, a version, a shortdescription, security ratings, user reviews, and/or user ratings. Atleast some of the extracted attributes may relate to functional aspectsof the identified applications. In some examples, attributes may bedirectly received from gathered data, and in other examples, attributesmay be generated or inferred based on the gathered data. The attributesmay be included in the application representation structures thatrepresent the applications. In another example, the indexing module 210structures the gathered data by extracting data that represents anattribute of an indexed application and places the data in theapplication representation accordingly.

Based on the application representations, the indexing module 210generates one or more search indexes for supporting application searchand stores the indexes in a computer-readable storage device. Forexample, the indexing module 210 may generate the search indexes byprocessing the attributes included in each of the applicationrepresentations. Each search index may be a data structure populatedwith an application ID corresponding to the application representationsof the applications. In one embodiment, each index corresponds to acategory of applications. An application category may be a group ofapplications having similar functionality, language, platform, subjectmatter, price, or some other attribute. Various examples of indexes thatmay be generated by the indexing module 210 are illustrated in FIG. 2B.For example, a search index 220 for the category “cooking” may includeonly cooking applications, a search index 225 for the category “games”may include only games, a search index 230 for “IPHONE” may include onlyapplications compatible with the IPHONE platform, and so forth. Searchindexes may also be generated and maintained for a particular partner125, with each index including application representations curated bythe partner 125 or having one or more attributes specified by thepartner 125. For example, the indexing module 210 may generate an indexfor a children's entertainment company that includes applicationrepresentations associated with a games attribute and a high securityrating. The search indexes may later be used to perform dynamicallyfiltered application searches. In one embodiment, the indexing module210 stores names of the categories corresponding to search indexes in adatabase, and provides a list of the category names to partners 125 forcustomizing application searches.

Application Search Module

FIG. 3 is a high level block diagram illustrating a detailed view ofmodules within the application search module 115 according to oneembodiment. Some embodiments of the application search module 115 havedifferent and/or other modules than the ones described herein.Similarly, the functions can be distributed among the modules inaccordance with other embodiments in a different manner than isdescribed here. Likewise, the functions can be performed by otherentities. The application search module 115 includes modules forperforming various functions. These modules include a query processingmodule 305, a post processing module 325, and a behavioral analysismodule 330.

The query processing module 305 processes queries received from one ormore partners 125. In one embodiment, the query processing module 305receives an input Q from a partner 125. The input Q may include a searchquery and one or more categories specified by a partner 125. In oneembodiment, the query processing module 305 sends a partner 125application categories (for example, as a list), and a partner 125returns a selection of one or more of the application categories. Thequery processing module 205 may then associate the queries receivedfrom, or otherwise associated with, the partner 125 with the samecategory selections. For example, an operator of a cooking websiteproviding users with a portal for searching cooking applications mayselect a “cooking” category. When user queries are submitted to thesystem 105 via the cooking website's portal, the query processing module305 may construct the input Q by associating the queries with the“cooking” category selected by the cooking website.

Alternatively, one or more query terms in the input Q may explicitlyidentify a category. The query processing module 305 may compare thequery terms to category names in a database stored by the applicationsearch module 115. For example, if the user enters a query for “wordgames,” the query processing module 305 may compare the query terms“word” and “games” to category names in the database. If the databaseincludes a “games” index, the query processing module may interpret thequery term “games” as an application category for the search.

In yet another embodiment, the input Q may implicitly identify anapplication category based on context information associated with theinput Q. Context information associated with an input Q may include thedevice from which a query was submitted, such as a type of the device(e.g., mobile phone or laptop computer) or a platform executing on thedevice (e.g., ANDROID, iOS, or WINDOWS). The context information mayalso include a language used in the query (e.g., English or Spanish).Based on the context information, the query processing module identifiesapplication categories. For example, a user may submit a query inSpanish from a mobile phone executing an ANDROID operating system. Thequery processing module 305 may identify the language of the query bycomparing query terms to terms in various dictionaries or analyzingcharacter pattern statistics. Based on platform or version metadata fora web browsing application from which the query was submitted, the queryprocessing module 305 may identify that the query was submitted from amobile phone executing an ANDROID operating system. Thus, the queryprocessing module 305 may identify the application categories “Spanish,”“mobile phone,” and “ANDROID” for the search query.

Based on the input Q, the query processing module 305 generates a set ofqueries. In addition to constructing the set of queries, the queryprocessing module 305 generates a set of query features F_(q) based onthe received search query. A query feature may be any suitableinformation related to a search query. For example, a query feature mayinclude information indicating a number of words in a search query.Query features can also include information specifying the popularity orfrequency of the received search query. Other query features mightinclude predicted concepts or desired categories of the search query,such as a “games” query category.

After processing the query, the query processing module 305 identifiesan initial set of applications and a corresponding set of attribute databased on the generated set of queries. To identify the initial set ofapplications and attribute data, the query processing module 305identifies one or more search indexes matching the set of queries. Asdiscussed, the application search system 105 may include a number ofsearch indexes corresponding to various application categories. In oneembodiment, the query processing module 305 selects an index based onone or more application categories specified in or associated with thequery. Illustratively, a received search query may include the query“Secure banking applications that work with my IPHONE.” Because thequery includes the term IPHONE, which matches the name of an applicationcategory, the query processing module 305 may automatically select anindex corresponding to the “IPHONE” application category. The selectedindex includes a set of applications limited to the IPHONE platform.

Alternatively, the query processing module 305 may select an index basedon the context information in the input Q, such as an identifier of thepartner transmitting the input Q or the IP address from which the queryoriginates. For example, the query processing module 305 may receive theIP address with the input Q and determine a partner 125 associated withthe IP address. The query processing module 305 retrieves the list ofcategories previously selected by the partner 125 and stored inassociation with an identifier the partner 125 and, based on the list,identifies the indexes.

In another embodiment, the query processing module 305 selects an indexby prompting the user entering a query to select one or more applicationcategories. For example, if a user enters a query for “word games,” thequery processing may provide the user with the prompt, “Would you liketo limit your search to games?” and options to select “Yes” or “No.” Ifthe user selects “Yes,” the query processing module 305 identifies“games” as an application category associated with the search query andselects the index corresponding to the identified games category.

After selection of the one or more indexes, the query processing module305 queries the selected indexes using the set of queries to identify aninitial set of applications and corresponding attributes as an initialset of search results for the queries. If multiple indexes are queried,the query processing module 305 may retrieve a set of applications fromeach index matching the queries. In this case, the query processingmodule 305 may identify the initial set of applications as the union ofthe application sets from each index. That is, the query processingmodule 305 may only include the applications that appear in results fromeach queried index in the initial set of search results. For example, ifa received input Q includes a query for “games in Spanish,” the queryprocessing module 305 may retrieve an initial set of search results byquerying an index of games and an index of applications in Spanish, andidentifying the applications occurring in both indexes.

Following identification of the initial set of applications, the queryprocessing module 305 determines the application-specific features F_(r)for the initial set of applications. In one embodiment, theapplication-specific features F_(r) for each application in the initialset may include or be based on the attributes of the application.

In one embodiment, the query processing module 305 processes the initialor filtered set of applications in order to generate a set of rankedsearch results. To do so, the query processing module 305 generates aset of query/result features F_(q/r) that indicate the relationshipsbetween the set of features F_(r) of the applications in the initial setand the query features F_(q). For example, the set of features F_(q/r)may indicate the distances between terms in the search query and termsin the applications' titles.

In one embodiment, the query processing module 305 applies at least theapplication-specific features F_(r), the query/result feature F_(q/r),and the query features F_(q) to a machine learned scoring model. Themachine learned scoring model may score the relevance of eachapplication to the search query based on the application-specificfeatures F_(r), the query/result feature F_(q/r), and the query featuresF_(q). In one embodiment, the machine learned scoring module may bespecific to a partner 125, or specifically trained for a particularapplication index. Based on the scoring, the query processing module 305generates a set of search results. The set of search results may includean ordering of applications from the filtered set of applications basedon the scores for the applications. The ordering may indicate thedetermined relevance of the applications to the search query.

The post-processing module 325 processes the search results to generatea final results list. In one embodiment, the post-processing module 325obtains display-related metadata for the search results, such asapplication images (e.g., application screenshots), applicationdescriptions, application videos, etc. The post-processing module 325may organize the search results by restricting the number of results inthe list that are from a single developer or platform, clustering theresults by concept, or emphasizing specific editions of an applicationmost relevant to the query. Thus, the list of results may be modifiedfrom its default sort-by-score order.

The behavior analysis module 330 monitors the actions of the partner 125that provided the query. For example, the system can determine whichapplications were eventually viewed or downloaded by the partner 125 orusers associated with the partner 125. The behavior analysis module 330analyzes the partners' actions to further extract attributes for theapplications. The extracted attributes may be used to later influencethe performance of subsequent searches performed by the applicationsearch module 115. In one embodiment, the behavior analysis module 330monitors the partners' actions to determine an application category tobe associated with the partners' searches. For example, if users of apartner primarily download games, the behavior analysis module 330 mayidentify a games category for the partner

Process for Providing Customizable Search

FIG. 4A illustrates a method for dynamically filtering applicationsearch results, in accordance with an embodiment. Other embodiments canperform the steps of the method in different orders and can includedifferent, additional, and/or fewer steps. The process shown in FIG. 4Acan be performed by the application search module 115.

In one embodiment, the application search module 115 receives 402 anapplication category selection from a partner 125 and stores theselection in association with an identifier of the partner 125, suchthat queries received from the partner 125 can be associated with theselections. The application search module 115 receives 404 a searchquery associated with the partner 125. Depending on the configuration ofthe partner 125 and/or a partner system associated with the partner 125,the application search module 115 may receive 404 a search query fromthe partner 125 or from a user device interacting with a website orportal provided by the partner 125. In response to receiving the searchquery, the application search module 115 retrieves 406 applicationcategory selections stored in association with an identifier of thepartner 125 from which the query was received.

Using the submitted search query, the application search module 115queries 408 one or more indexes associated with the selected category togenerate an initial set of search results. The initial set of resultscomprises identifiers of applications within the selected applicationcategory. The application search module 115 sorts 410 the initialresults set based on machine learning, and post-processes 412 the sortedset of generate a final results list to be presented to an end user. Thefinal results list is displayed 414 to the end user via the partner 125or a computing device associated with the partner 125.

The end user may interact with the final results list to, for example,view information about applications of interest. The application searchmodule 115 may receive 416 actions of the end user (or partner 125) withrespect to the final results list. For example, the application searchmodule 115 may maintain a log of the applications from the results listthat the user eventually downloads, and use the log to improve rankingof the applications or learn categories to be associated with partnersearches.

An alternative embodiment of a method for dynamically filteringapplication search results is illustrated in FIG. 4B. The processillustrated in FIG. 4B may be performed by the application search module115 for performing application searches when application categories arespecified by the end users of a partner 125.

The application search module 115 receives 420 an application searchquery. Based on the received query, the application search module 115identifies 422 an application category. For example, an end user maysubmit a query for “games” to the application search module 115. Theapplication search module 115 may interpret “games” as an applicationcategory. As another example, if an end user submits a query for “wordgames,” the application search module 115 may interpret “games” as acategory and “word” as a keyword of the query. As yet another example, aquery may include “Spiele,” and the application search module 115 mayidentify both “games” and “German” as application categories.

Based on the identified category, the application search module 115selects one or more indexes associated with the identified category andqueries 424 the selected indexes to generate an initial results set. Theapplication search module 115 processes 426 the initial results set andgenerates a final list of search results corresponding to the end user'squery. The final results list is displayed 428 to the end user.

FIG. 5 illustrates a method for receiving dynamically filteredapplication search results, in accordance with an embodiment. Otherembodiments can perform the steps of the method in different orders andcan include different, additional, and/or fewer steps. The process shownin FIG. 5 can be performed by a user device, such as the user device ofan end user of a partner 125.

The user device transmits 502 a query to the application search system105. In one embodiment, the user device transmits 502 the query via apartner 125 associated with the user device. An application category maybe specified in the query or previously stored by the application searchsystem 105 for the partner 125. The user device receives 504 a set ofsearch results from the application search system 105 determined basedon the query and the application category, and displays 506 the searchresults. The search results comprise identifiers of applications fromthe application category specified by the query or stored for thepartner 125.

The embodiments described herein beneficially allow application searchsystems to provide search results within particular applicationcategories. By querying an index corresponding to an applicationcategory selected by a partner or specified by a user (whetherimplicitly or explicitly), an application search system as describedherein returns search results customized according to the preferences ofend users or partners. As an example, a partner 125 may be a mobilenetwork operator (MNO). The MNO may select a category for applicationscompatible with the MNO's platform. When its customers enter queriesinto the search portal provided by MNO, the application search system105 filters the search results to include only applications that arecompatible with the MNO's platform. Thus, the customers are providedwith more relevant search results than if they needed to manually revieweach application for compatibility with the platform.

Computing Machine Architecture

FIG. 6 is a block diagram illustrating components of an example machineable to read instructions from a machine-readable medium and executethem in a processor (or controller), as an example of the search system105, partners 125, or client devices. Specifically, FIG. 6 shows adiagrammatic representation of a machine in the example form of acomputer system 600 within which instructions 624 (e.g., software) forcausing the machine to perform any one or more of the methodologiesdiscussed herein may be executed. In alternative embodiments, themachine operates as a standalone device or may be connected (e.g.,networked) to other machines. In a networked deployment, the machine mayoperate in the capacity of a server machine or a client machine in aserver-client network environment, or as a peer machine in apeer-to-peer (or distributed) network environment.

The machine may be a server computer, a client computer, a personalcomputer (PC), a tablet PC, a set-top box (STB), a personal digitalassistant (PDA), a cellular telephone, a smartphone, a web appliance, anetwork router, switch or bridge, or any machine capable of executinginstructions 624 (sequential or otherwise) that specify actions to betaken by that machine. Further, while only a single machine isillustrated, the term “machine” shall also be taken to include anycollection of machines that individually or jointly execute instructions624 to perform any one or more of the methodologies discussed herein.

The example computer system 600 includes one or more processors 602(e.g., a central processing unit (CPU), a graphics processing unit(GPU), a digital signal processor (DSP), one or more applicationspecific integrated circuits (ASICs), one or more radio-frequencyintegrated circuits (RFICs), or any combination of these), a main memory604, and a static memory 606, which are configured to communicate witheach other via a bus 608. The computer system 600 may further includegraphics display unit 610 (e.g., a plasma display panel (PDP), a liquidcrystal display (LCD), a projector, or a cathode ray tube (CRT)). Thecomputer system 600 may also include alphanumeric input device 612(e.g., a keyboard), a cursor control device 614 (e.g., a mouse, atrackball, a joystick, a motion sensor, or other pointing instrument), astorage unit 616, a signal generation device 618 (e.g., a speaker), anda network interface device 620, which also are configured to communicatevia the bus 608.

The storage unit 616 includes a machine-readable medium 622 on which isstored instructions 624 (e.g., software) embodying any one or more ofthe methodologies or functions described herein. The instructions 624(e.g., software) may also reside, completely or at least partially,within the main memory 604 or within the processor 602 (e.g., within aprocessor's cache memory) during execution thereof by the computersystem 600, the main memory 604 and the processor 602 also constitutingmachine-readable media. The instructions 624 (e.g., software) may betransmitted or received over a network 626 via the network interfacedevice 620.

While machine-readable medium 622 is shown in an example embodiment tobe a single medium, the term “machine-readable medium” should be takento include a single medium or multiple media (e.g., a centralized ordistributed database, or associated caches and servers) able to storeinstructions (e.g., instructions 624). The term “machine-readablemedium” shall also be taken to include any medium that is capable ofstoring instructions (e.g., instructions 624) for execution by themachine and that cause the machine to perform any one or more of themethodologies disclosed herein. The term “machine-readable medium”includes, but not be limited to, data repositories in the form ofsolid-state memories, optical media, and magnetic media.

ADDITIONAL CONFIGURATION CONSIDERATIONS

Throughout this specification, plural instances may implementcomponents, operations, or structures described as a single instance.Although individual operations of one or more methods are illustratedand described as separate operations, one or more of the individualoperations may be performed concurrently, and nothing requires that theoperations be performed in the order illustrated. Structures andfunctionality presented as separate components in example configurationsmay be implemented as a combined structure or component. Similarly,structures and functionality presented as a single component may beimplemented as separate components. These and other variations,modifications, additions, and improvements fall within the scope of thesubject matter herein.

Certain embodiments are described herein as including logic or a numberof components, modules, or mechanisms, for example, as illustrated inFIGS. 1-3. Modules may constitute either software modules (e.g., codeembodied on a machine-readable medium or in a transmission signal) orhardware modules. A hardware module is tangible unit capable ofperforming certain operations and may be configured or arranged in acertain manner. In example embodiments, one or more computer systems(e.g., a standalone, client or server computer system) or one or morehardware modules of a computer system (e.g., a processor or a group ofprocessors, e.g., processor 602) may be configured by software (e.g., anapplication or application portion) as a hardware module that operatesto perform certain operations as described herein.

In various embodiments, a hardware module may be implementedmechanically or electronically. For example, a hardware module maycomprise dedicated circuitry or logic that is permanently configured(e.g., as a special-purpose processor, such as a field programmable gatearray (FPGA), an application-specific integrated circuit (ASIC), systemon a chip (SoC), chipset) to perform certain operations. A hardwaremodule may also comprise programmable logic or circuitry (e.g., asencompassed within a general-purpose processor or other programmableprocessor) that is temporarily configured by software to perform certainoperations. It will be appreciated that the decision to implement ahardware module mechanically, in dedicated and permanently configuredcircuitry, or in temporarily configured circuitry (e.g., configured bysoftware) may be driven by cost and time considerations.

The various operations of example methods described herein may beperformed, at least partially, by one or more processors, e.g.,processor 602, that are temporarily configured (e.g., by software) orpermanently configured to perform the relevant operations. Whethertemporarily or permanently configured, such processors may constituteprocessor-implemented modules that operate to perform one or moreoperations or functions. The modules referred to herein may, in someexample embodiments, comprise processor-implemented modules.

The one or more processors may also operate to support performance ofthe relevant operations in a “cloud computing” environment or as a“software as a service” (SaaS). For example, at least some of theoperations may be performed by a group of computers (as examples ofmachines including processors), these operations being accessible via anetwork (e.g., the Internet) and via one or more appropriate interfaces(e.g., application program interfaces (APIs).)

The performance of certain of the operations may be distributed amongthe one or more processors, not only residing within a single machine,but deployed across a number of machines. In some example embodiments,the one or more processors or processor-implemented modules may belocated in a single geographic location (e.g., within a homeenvironment, an office environment, or a server farm). In other exampleembodiments, the one or more processors or processor-implemented modulesmay be distributed across a number of geographic locations.

Some portions of this specification are presented in terms of algorithmsor symbolic representations of operations on data stored as bits orbinary digital signals within a machine memory (e.g., a computermemory). These algorithms or symbolic representations are examples oftechniques used by those of ordinary skill in the data processing artsto convey the substance of their work to others skilled in the art. Asused herein, an “algorithm” is a self-consistent sequence of operationsor similar processing leading to a desired result. In this context,algorithms and operations involve physical manipulation of physicalquantities. Typically, but not necessarily, such quantities may take theform of electrical, magnetic, or optical signals capable of beingstored, accessed, transferred, combined, compared, or otherwisemanipulated by a machine. It is convenient at times, principally forreasons of common usage, to refer to such signals using words such as“data,” “content,” “bits,” “values,” “elements,” “symbols,”“characters,” “terms,” “numbers,” “numerals,” or the like. These words,however, are merely convenient labels and are to be associated withappropriate physical quantities.

Unless specifically stated otherwise, discussions herein using wordssuch as “processing,” “computing,” “calculating,” “determining,”“presenting,” “displaying,” or the like may refer to actions orprocesses of a machine (e.g., a computer) that manipulates or transformsdata represented as physical (e.g., electronic, magnetic, or optical)quantities within one or more memories (e.g., volatile memory,non-volatile memory, or a combination thereof), registers, or othermachine components that receive, store, transmit, or displayinformation.

As used herein any reference to “one embodiment” or “an embodiment”means that a particular element, feature, structure, or characteristicdescribed in connection with the embodiment is included in at least oneembodiment. The appearances of the phrase “in one embodiment” in variousplaces in the specification are not necessarily all referring to thesame embodiment.

Some embodiments may be described using the expression “coupled” and“connected” along with their derivatives. For example, some embodimentsmay be described using the term “coupled” to indicate that two or moreelements are in direct physical or electrical contact. The term“coupled,” however, may also mean that two or more elements are not indirect contact with each other, but yet still co-operate or interactwith each other. The embodiments are not limited in this context.

As used herein, the terms “comprises,” “comprising,” “includes,”“including,” “has,” “having” or any other variation thereof, areintended to cover a non-exclusive inclusion. For example, a process,method, article, or apparatus that comprises a list of elements is notnecessarily limited to only those elements but may include otherelements not expressly listed or inherent to such process, method,article, or apparatus. Further, unless expressly stated to the contrary,“or” refers to an inclusive or and not to an exclusive or. For example,a condition A or B is satisfied by any one of the following: A is true(or present) and B is false (or not present), A is false (or notpresent) and B is true (or present), and both A and B are true (orpresent).

In addition, use of the “a” or “an” are employed to describe elementsand components of the embodiments herein. This is done merely forconvenience and to give a general sense of the invention. Thisdescription should be read to include one or at least one and thesingular also includes the plural unless it is obvious that it is meantotherwise.

Upon reading this disclosure, those of skill in the art will appreciatestill additional alternative structural and functional designs for asystem and a process for providing customizable search through thedisclosed principles herein. Thus, while particular embodiments andapplications have been illustrated and described, it is to be understoodthat the disclosed embodiments are not limited to the preciseconstruction and components disclosed herein. Various modifications,changes and variations, which will be apparent to those skilled in theart, may be made in the arrangement, operation and details of the methodand apparatus disclosed herein without departing from the spirit andscope defined in the appended claims.

What is claimed is:
 1. An application search system for providing searchresults to a plurality of partner devices, the application search systemcomprising: a data processing module that receives data identifying aplurality of applications, wherein each of the plurality of applicationsis associated with one or more of a plurality of application categories,and generates, based on the received data, a plurality of searchindexes, wherein each of the plurality of search indexes corresponds toa respective one of the plurality of application categories; and anapplication search module that receives, via a network, a search queryfrom a first partner device of the plurality of partner devices,identifies a first application category of the plurality of applicationcategories based on the search query, selects, from the plurality ofsearch indexes, a first search index corresponding to the identifiedfirst application category, queries the selected first search index toidentify a first plurality of application representations associatedwith the identified first application category, generates search resultsbased on the first plurality of application representations, andprovides the generated search results to be transmitted to the firstpartner device.
 2. The application search system of claim 1, wherein theapplication search module: identifies a second application category ofthe plurality of application categories based on the search query;selects, from the plurality of search indexes, a second search indexbased on the second identified application category; queries theselected second search index to identify a second plurality ofapplication representations associated with the identified secondapplication category; and generates the search results based on a unionof the first plurality of application representations and the secondplurality of application representations.
 3. The application searchsystem of claim 1, wherein, to select the first search index, theapplication search module selects the first index further based on anidentifier of the first partner device.
 4. The application search systemof claim 3, wherein two or more of the plurality of search indexescorrespond to the respective one of the application categories, andwherein, to select the first index, the application search moduleselects the first index from among the two or more of the plurality ofsearch indexes based on the identifier of the first partner device. 5.The application search system of claim 1, wherein, to identify the firstapplication category, the application search module identifies the firstapplication category further based on a platform executing on the firstpartner device.
 6. The application search system of claim 5, whereincontext information received from the first partner device includes anindication of the platform executing on the first partner device.
 7. Theapplication search system of claim 1, wherein a subset of the pluralityof application categories is associated with the partner device.
 8. Theapplication search system of claim 1, wherein, to identify the firstapplication category, the application search module: provides thepartner device with the plurality of application categories; receives,from the partner device, a selection of the first application categoryfrom the plurality of application categories; stores an association ofthe first application category with a partner identifier of the partnerdevice; and identifies the first application category based on thestored association.
 9. The application search system of claim 1, whereinthe search query includes an indication of the first applicationcategory and the application search module identifies the firstapplication category based on the indication.
 10. The application searchsystem of claim 1, wherein, to identify the first application category,(i) the application search module generates, based on at least one termin the search query, a prompt to be provided to a user of the partnerdevice, and (ii) the application search module identifies the firstapplication category based on a selection made by the user in responseto the prompt.
 11. A method for providing search results to a pluralityof partner devices, the method comprising: receiving data identifying aplurality of applications, wherein each of the plurality of applicationsis associated with one or more of a plurality of application categories;generating, based on the received data, a plurality of search indexes,wherein each of the plurality of search indexes corresponds to arespective one of the plurality of application categories; receiving,via a network, a search query from a first partner device of theplurality of partner devices; identifying a first application categoryof the plurality of application categories based on the search query;selecting, from the plurality of search indexes, a first search indexcorresponding to the identified first application category; querying theselected first search index to identify a first plurality of applicationrepresentations associated with the identified first applicationcategory; generating search results based on the first plurality ofapplication representations; and providing the generated search resultsto be transmitted to the first partner device.
 12. The method of claim11, further comprising: identifying a second application category of theplurality of application categories based on the search query;selecting, from the plurality of search indexes, a second search indexbased on the second identified application category; querying theselected second search index to identify a second plurality ofapplication representations associated with the identified secondapplication category; and generating the search results based on a unionof the first plurality of application representations and the secondplurality of application representations.
 13. The method of claim 11,wherein selecting the first search index includes selecting the firstindex further based on an identifier of the first partner device. 14.The method of claim 13, wherein two or more of the plurality of searchindexes correspond to the respective one of the application categories,and wherein selecting the first index includes selecting the first indexfrom among the two or more of the plurality of search indexes based onthe identifier of the first partner device.
 15. The method of claim 11,wherein identifying the first application category includes identifyingthe first application category further based on a platform executing onthe first partner device.
 16. The method of claim 15, wherein contextinformation received from the first partner device includes anindication of the platform executing on the first partner device. 17.The method of claim 11, wherein a subset of the plurality of applicationcategories is associated with the partner device.
 18. The method ofclaim 11, wherein identifying the first application category includes:providing the partner device with the plurality of applicationcategories; receiving, from the partner device, a selection of the firstapplication category from the plurality of application categories;storing an association of the first application category with a partneridentifier of the partner device; and identifying the first applicationcategory based on the stored association.
 19. The method of claim 11,wherein the search query includes an indication of the first applicationcategory and identifying the first application category based on theindication.
 20. The method of claim 11, wherein identifying the firstapplication category includes (i) generating, based on at least one termin the search query, a prompt to be provided to a user of the partnerdevice, and (ii) identifying the first application category based on aselection made by the user in response to the prompt.